﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
    public Transform target;
    float smoothTime = 1;
    Vector3 velocity = Vector3.zero;

    void Start()
    {
        // 上下左右，对应坐标系上下左右
        print(Vector3.down);
        print(Vector3.up);
        print(Vector3.left);
        print(Vector3.right);

        print(Vector3.one);
        print(Vector3.zero);

        Vector3 z = Vector3.forward;// (0, 0, 1)
        Vector3 x = Vector3.right;// (1, 0, 0)
        Vector3 y = Vector3.up;// (0, 1, 0)
        Vector3 c = z - x;
        print(c.magnitude);
        print(c.sqrMagnitude);
        print(c.normalized);

        //向量是结构体，是值类型，要整体赋值
        transform.position = new Vector3(3, 3, 3);
        Vector3 pos = transform.position;
        pos.x = 10;
        transform.position = pos;

        // 两个向量夹角
        print(Vector3.Angle(z, x));

        // 两个点之间的距离
        print(Vector3.Distance(z, x));

        // 点积是一个浮点值，它等于两个矢量的大小相乘，然后乘以它们之间角度的余弦。
        print(Vector3.Dot(z, x));

        // 从a, b, c三个点获得三角形的法线
        print(GetNormal(z, x, y));

        Vector3 vector = new Vector3(1, 1, 1);
        // 向量vector在z向量方向上的投影
        print(Vector3.Project(vector, z));

        // a,b向量之间插值
        print(Vector3.Lerp(z, x, 0.5f));
        print(Vector3.LerpUnclamped(z, x, 0.5f));

        // 返回最大长度的向量
        print(Vector3.Max(z, x));
        print(Vector3.Min(z, x));

        // 每个分量的乘积
        // 结果(2, 6, 12)=(1 * 2 + 2 * 3 + 3 * 4)
        print(Vector3.Scale(new Vector3(1, 2, 3), new Vector3(2, 3, 4)));

        // 求反射向量 Vector3 Reflect(Vector3 inDirection, Vector3 inNormal);
        // inDirection入射向量， inNormal垂直平面的法线
        print(Vector3.Reflect(new Vector3(-1, -1, -1), Vector3.up));

        // 两个向量间的球面插值
        Vector3.Slerp(Vector3.forward, Vector3.right, 0.5f);

    }

    // 从a, b, c三个点获得三角形的法线
    Vector3 GetNormal(Vector3 a, Vector3 b, Vector3 c)
    {
        // 找到对应三角形的两个边
        Vector3 side1 = b - a;
        Vector3 side2 = c - a;

        // 求得叉乘结果，并归一化
        // Vector3.Cross叉乘结果，同时垂直side1和side2的向量
        return Vector3.Cross(side1, side2).normalized;
    }

    void Update()
    {

    }
}
